Phyloseq 1.30.0

## Import functions
library(plotly)
library(phyloseq)
source(file.path(params$libdir, "graphical_methods.R")) 
## Alternative to source all extra function from a github repo
# source("https://raw.githubusercontent.com/mahendra-mariadassou/phyloseq-extended/master/load-extra-functions.R")

## Setting variables
  ## Phyloseq object (rdata file)
  # phyloseq <- ""
  
  ## Experimental variable used to group samples (Treatment, Host type, etc).
  # varExp <- "" 
  
  ## Taxonomic level to filter your data" help="ex: Kingdom, Phylum, Class, Order, Family, Genus, Species
  # taxaRank1 <- ""
  
  ## Taxa (at the above taxonomic level) to keep in the dataset"
  ## ex: Bacteria (when filtering at the Kingdom level), Firmicutes (when filtering at the Phylum level). 
  ## Multiple taxa (separated by a space) can be specified, i.e. Firmicutes Proteobacteria 
  # taxaSet1 <- "" 
  
  ## Taxonomic level used for aggregation" help="ex: Family (when filtering at the Phylum level). 
  ## The aggregation level must be below the filtering level.
  # taxaRank2 <- ""
  
  ## Number of most abundant taxa to keep", 
  ## ex: 9, i.e. Tool keeps the 9 most abundant taxa and the remaining taxa are aggregated in a group 'Other
  # numberOfTaxa = 

  ## Create input and parameters dataframe
  # params <- data.frame("phyloseq"=phyloseq, 
  #                      "varExp"=varExp, 
  #                      "taxaRank1" = taxaRank1, 
  #                      "taxaSet1" = taxaSet1, 
  #                      "taxaRank2" = taxaRank2, 
  #                      "numberOfTaxa"=numberOfTaxa )

## Load Phyloseq object
load(params$phyloseq)

# custum graphical facetting
facet <- paste('facet_wrap(~', params$varExp,', scales = "free_x", nrow = 1)')

Bar plot

p <- plot_bar(data,fill= rank_names(data)[2]) + eval(parse(text = facet)) + 
        ggtitle(paste("Bar plot colored by", rank_names(data)[2])) + 
        theme(plot.title = element_text(hjust = 0.5))
plot(p)

Composition plot

taxaSet1 <- unlist(strsplit(params$taxaSet1, " "))
p        <- plot_composition(data, params$taxaRank1, taxaSet1, params$taxaRank2, params$numberOfTaxa, fill=params$taxaRank2) 
p        <- p + eval(parse(text = facet)) + theme(plot.title = element_text(hjust = 0.5))

gp <- ggplotly(p, tooltip = c("x", "y", "fill"))
gp$x$layout$annotations[[1]]$x <- -0.08
gp$x$layout$margin$l = 75
gp$x$layout$margin$b = 100
gp$x$layout$margin$t = 100
gp
LS0tCnRpdGxlOiAiRlJPR1MgUGh5bG9zZXE6IFZpc3VhbGl6ZSBEYXRhIENvbXBvc2l0aW9uICh2ZXJzaW9uIDMuMikiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY29kZV9mb2xkaW5nIDogaGlkZQpwYXJhbXM6CiAgcGh5bG9zZXE6CiAgICB2YWx1ZTogeAogIHZhckV4cDoKICAgIHZhbHVlOiB4CiAgdGF4YVJhbmsxOgogICAgdmFsdWU6IHgKICB0YXhhU2V0MToKICAgIHZhbHVlOiB4CiAgdGF4YVJhbmsyOgogICAgdmFsdWU6IHgKICBudW1iZXJPZlRheGE6CiAgICB2YWx1ZTogeAogIGxpYmRpcjoKICAgIHZhbHVlOiB4Ci0tLQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpjb2RlLnJ7IC8qIENvZGUgYmxvY2sgKi8KICBmb250LXNpemU6IDExcHg7Cn0KcHJleyAvKiBDb2RlIGJsb2NrICovCiAgZm9udC1zaXplOiAxMXB4Cn0KLmJ1dHRvbiB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmE3ZWNjOyAvKiBCbHVlICovCiAgICBib3JkZXIgICAgICAgICAgOiBub25lOwogICAgY29sb3IgICAgICAgICAgIDogd2hpdGU7CiAgICBwYWRkaW5nICAgICAgICAgOiA1cHggMTBweDsKICAgIHRleHQtYWxpZ24gICAgICA6IGNlbnRlcjsKICAgIHRleHQtZGVjb3JhdGlvbiA6IG5vbmU7CiAgICBkaXNwbGF5ICAgICAgICAgOiBpbmxpbmUtYmxvY2s7CiAgICBmb250LXNpemUgICAgICAgOiAxMnB4OwogICAgbWFyZ2luICAgICAgICAgIDogNHB4IDJweDsKICAgIGN1cnNvciAgICAgICAgICA6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzICAgOiA4cHg7Cn0KaDQgeyAKICAgIGRpc3BsYXkgICAgICA6IGJsb2NrOwogICAgZm9udC1zaXplICAgIDogMWVtOwogICAgbWFyZ2luLXRvcCAgIDogMS4zM2VtOwogICAgbWFyZ2luLWJvdHRvbTogMS4zM2VtOwogICAgbWFyZ2luLWxlZnQgIDogMDsKICAgIG1hcmdpbi1yaWdodCA6IDA7CiAgICBmb250LXdlaWdodCAgOiBib2xkOwogICAgY29sb3IgICAgICAgIDogIzJhN2VjYzsKfQo8L3N0eWxlPgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgClBoeWxvc2VxIGByIHBhY2thZ2VWZXJzaW9uKCJwaHlsb3NlcSIpYAoKYGBge3IgaW1wb3J0LCBtZXNzYWdlPUZBTFNFfQojIyBJbXBvcnQgZnVuY3Rpb25zCmxpYnJhcnkocGxvdGx5KQpsaWJyYXJ5KHBoeWxvc2VxKQpzb3VyY2UoZmlsZS5wYXRoKHBhcmFtcyRsaWJkaXIsICJncmFwaGljYWxfbWV0aG9kcy5SIikpIAojIyBBbHRlcm5hdGl2ZSB0byBzb3VyY2UgYWxsIGV4dHJhIGZ1bmN0aW9uIGZyb20gYSBnaXRodWIgcmVwbwojIHNvdXJjZSgiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21haGVuZHJhLW1hcmlhZGFzc291L3BoeWxvc2VxLWV4dGVuZGVkL21hc3Rlci9sb2FkLWV4dHJhLWZ1bmN0aW9ucy5SIikKCiMjIFNldHRpbmcgdmFyaWFibGVzCiAgIyMgUGh5bG9zZXEgb2JqZWN0IChyZGF0YSBmaWxlKQogICMgcGh5bG9zZXEgPC0gIiIKICAKICAjIyBFeHBlcmltZW50YWwgdmFyaWFibGUgdXNlZCB0byBncm91cCBzYW1wbGVzIChUcmVhdG1lbnQsIEhvc3QgdHlwZSwgZXRjKS4KICAjIHZhckV4cCA8LSAiIiAKICAKICAjIyBUYXhvbm9taWMgbGV2ZWwgdG8gZmlsdGVyIHlvdXIgZGF0YSIgaGVscD0iZXg6IEtpbmdkb20sIFBoeWx1bSwgQ2xhc3MsIE9yZGVyLCBGYW1pbHksIEdlbnVzLCBTcGVjaWVzCiAgIyB0YXhhUmFuazEgPC0gIiIKICAKICAjIyBUYXhhIChhdCB0aGUgYWJvdmUgdGF4b25vbWljIGxldmVsKSB0byBrZWVwIGluIHRoZSBkYXRhc2V0IgogICMjIGV4OiBCYWN0ZXJpYSAod2hlbiBmaWx0ZXJpbmcgYXQgdGhlIEtpbmdkb20gbGV2ZWwpLCBGaXJtaWN1dGVzICh3aGVuIGZpbHRlcmluZyBhdCB0aGUgUGh5bHVtIGxldmVsKS4gCiAgIyMgTXVsdGlwbGUgdGF4YSAoc2VwYXJhdGVkIGJ5IGEgc3BhY2UpIGNhbiBiZSBzcGVjaWZpZWQsIGkuZS4gRmlybWljdXRlcyBQcm90ZW9iYWN0ZXJpYSAKICAjIHRheGFTZXQxIDwtICIiIAogIAogICMjIFRheG9ub21pYyBsZXZlbCB1c2VkIGZvciBhZ2dyZWdhdGlvbiIgaGVscD0iZXg6IEZhbWlseSAod2hlbiBmaWx0ZXJpbmcgYXQgdGhlIFBoeWx1bSBsZXZlbCkuIAogICMjIFRoZSBhZ2dyZWdhdGlvbiBsZXZlbCBtdXN0IGJlIGJlbG93IHRoZSBmaWx0ZXJpbmcgbGV2ZWwuCiAgIyB0YXhhUmFuazIgPC0gIiIKICAKICAjIyBOdW1iZXIgb2YgbW9zdCBhYnVuZGFudCB0YXhhIHRvIGtlZXAiLCAKICAjIyBleDogOSwgaS5lLiBUb29sIGtlZXBzIHRoZSA5IG1vc3QgYWJ1bmRhbnQgdGF4YSBhbmQgdGhlIHJlbWFpbmluZyB0YXhhIGFyZSBhZ2dyZWdhdGVkIGluIGEgZ3JvdXAgJ090aGVyCiAgIyBudW1iZXJPZlRheGEgPSAKCiAgIyMgQ3JlYXRlIGlucHV0IGFuZCBwYXJhbWV0ZXJzIGRhdGFmcmFtZQogICMgcGFyYW1zIDwtIGRhdGEuZnJhbWUoInBoeWxvc2VxIj1waHlsb3NlcSwgCiAgIyAgICAgICAgICAgICAgICAgICAgICAidmFyRXhwIj12YXJFeHAsIAogICMgICAgICAgICAgICAgICAgICAgICAgInRheGFSYW5rMSIgPSB0YXhhUmFuazEsIAogICMgICAgICAgICAgICAgICAgICAgICAgInRheGFTZXQxIiA9IHRheGFTZXQxLCAKICAjICAgICAgICAgICAgICAgICAgICAgICJ0YXhhUmFuazIiID0gdGF4YVJhbmsyLCAKICAjICAgICAgICAgICAgICAgICAgICAgICJudW1iZXJPZlRheGEiPW51bWJlck9mVGF4YSApCgojIyBMb2FkIFBoeWxvc2VxIG9iamVjdApsb2FkKHBhcmFtcyRwaHlsb3NlcSkKCiMgY3VzdHVtIGdyYXBoaWNhbCBmYWNldHRpbmcKZmFjZXQgPC0gcGFzdGUoJ2ZhY2V0X3dyYXAoficsIHBhcmFtcyR2YXJFeHAsJywgc2NhbGVzID0gImZyZWVfeCIsIG5yb3cgPSAxKScpCgpgYGAKCiMgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9CiMjIEJhciBwbG90CmBgYHtyIGJhcl9wbG90LCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9OH0KcCA8LSBwbG90X2JhcihkYXRhLGZpbGw9IHJhbmtfbmFtZXMoZGF0YSlbMl0pICsgZXZhbChwYXJzZSh0ZXh0ID0gZmFjZXQpKSArIAogICAgICAgIGdndGl0bGUocGFzdGUoIkJhciBwbG90IGNvbG9yZWQgYnkiLCByYW5rX25hbWVzKGRhdGEpWzJdKSkgKyAKICAgICAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKcGxvdChwKQpgYGAKCiMjIENvbXBvc2l0aW9uIHBsb3QKYGBge3IgY29tcG9zaW9uX3Bsb3QsIGZpZy53aWR0aD0xMCwgZmlnLmhlaWdodD04LCB3YXJuaW5nPUZBTFNFfQp0YXhhU2V0MSA8LSB1bmxpc3Qoc3Ryc3BsaXQocGFyYW1zJHRheGFTZXQxLCAiICIpKQpwICAgICAgICA8LSBwbG90X2NvbXBvc2l0aW9uKGRhdGEsIHBhcmFtcyR0YXhhUmFuazEsIHRheGFTZXQxLCBwYXJhbXMkdGF4YVJhbmsyLCBwYXJhbXMkbnVtYmVyT2ZUYXhhLCBmaWxsPXBhcmFtcyR0YXhhUmFuazIpIApwICAgICAgICA8LSBwICsgZXZhbChwYXJzZSh0ZXh0ID0gZmFjZXQpKSArIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpKQoKZ3AgPC0gZ2dwbG90bHkocCwgdG9vbHRpcCA9IGMoIngiLCAieSIsICJmaWxsIikpCmdwJHgkbGF5b3V0JGFubm90YXRpb25zW1sxXV0keCA8LSAtMC4wOApncCR4JGxheW91dCRtYXJnaW4kbCA9IDc1CmdwJHgkbGF5b3V0JG1hcmdpbiRiID0gMTAwCmdwJHgkbGF5b3V0JG1hcmdpbiR0ID0gMTAwCmdwCmBgYA==